/* icmp_ping.h */
#pragma once
#include <iostream>
#include <string>
#include <chrono>

#ifdef _WIN32
#include <winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib, "ws2_32.lib")
#define CLOSE_SOCKET closesocket
#else
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define SOCKET int
#define CLOSE_SOCKET close
#endif

// ICMP 报文结构
struct icmp_header
{
    uint8_t type;      // 类型
    uint8_t code;      // 代码
    uint16_t checksum; // 校验和
    uint16_t id;       // 标识符
    uint16_t seq;      // 序列号
                       // 时间戳和数据字段在后续数据部分
};

// 计算校验和
uint16_t checksum(void *buf, int len);